/*
 *   RapCAD - Rapid prototyping CAD IDE (www.rapcad.org)
 *   Copyright (C) 2010-2014 Giles Bathgate
 *
 *   This program is free software: you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation, either version 3 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include "sumfunction.h"
#include "vectorvalue.h"
#include "numbervalue.h"

SumFunction::SumFunction() : Function("sum")
{
	addParameter("values");
}

Value* SumFunction::evaluate(Context* ctx)
{
	VectorValue* vecVal=dynamic_cast<VectorValue*>(getParameterArgument(ctx,0));
	if(vecVal) {
		Value* resultVal = new NumberValue(0);
		foreach(Value* child, vecVal->getChildren())
			resultVal=Value::operation(resultVal,Expression::Add,child);

		return resultVal;
	}
	return new Value();
}
